package java8.lambda;

import java8.function.MathOperation;
import org.junit.Test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Consumer;
import java.util.function.IntFunction;

/**
 * 语法
 */
public class Grammar {
    /**
     * // 1. 不需要参数,返回值为 5
     * () -> 5
     * <p>
     * // 2. 接收一个参数(数字类型),返回其2倍的值
     * x -> 2 * x
     * <p>
     * // 3. 接受2个参数(数字),并返回他们的差值
     * (x, y) -> x – y
     * <p>
     * // 4. 接收2个int型整数,返回他们的和
     * (int x, int y) -> x + y
     * <p>
     * // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
     * (String s) -> System.out.print(s)
     * // 6.方法引用
     * System.out::print
     * <p>
     * // 7 . 多个表达式 那么 return 和{} 都不能省
     * (x, y) -> {x = x-y; return x;};
     */
    @Test
    public void demo() {
        Callable<Integer> callable = () -> 5;
        IntFunction intFunction = x -> 2 * x;
        MathOperation f = (x, y) -> x - y;
        //多个表达式 那么 return 和{} 都不能省
        f = (x, y) -> {
            x = x - y;
            return x;
        };
        MathOperation f2 = (int x, int y) -> x + y;
        Consumer<String> stringConsumer = (String s) -> System.out.print(s);
        stringConsumer = System.out::print;
        //应该避免使用流来处理char值。
        "Hello world!".chars().forEach(System.out::print);
        new Thread(System.out::println).start();
        //ExecutorService exec = Executors.newCachedThreadPool();
        //exec.submit(System.out::println);
        System.out.println();
        System.out.println(Math.abs(Integer.MIN_VALUE) % 3);
        System.out.println(Math.abs(-1));
    }


}
